package com.qf.controller;

import com.qf.pojo.Cart;
import com.qf.pojo.CartItem;
import com.qf.pojo.Product;
import com.qf.pojo.User;
import com.qf.service.ProductService;
import com.qf.service.impl.ProductServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

/**
 * 购物车的后端访问地址
 */
@WebServlet("/cart")
public class CartServlet extends BaseServlet {

    //将购物车存储到HttpSession中
    //添加购物车项到购物车中/ 删除指定的购物车项/清空所有购物车项,都需要获取Cart
    public Cart getCartFromHttpSession(HttpServletRequest request){
        //请求对象中获取Session
        HttpSession session = request.getSession();
        //从Session获取属性
        Cart cart = (Cart) session.getAttribute("cart") ;
        //HttpSession底层依赖于Cookie 名称"JSESSIONID",id值


        //判断从HttpSession获取的数据是否为null
        if(cart==null){
            //HttpSession中没有数据
            //给HttpSession中存储数据,创建购物车
            cart = new Cart() ;
            session.setAttribute("cart",cart) ;
        }
        return cart ;
    }


    /**
     * 将购物车项添加购物车中
     * @param request 请求对象
     * @param response 响应对象
     */
    public  void addCartItem2Cart(HttpServletRequest request,HttpServletResponse response) throws IOException {

        //判断用户是否登录了
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user") ;
        if(user==null){
            //没有登录
            //重定向到登录页面
            response.sendRedirect(request.getContextPath()+"/jsp/login.jsp");
            return;
        }

        //接收参数
        String pid = request.getParameter("pid") ;
        String count = request.getParameter("count");
        //调用商品的业务接口:通过商品编号获取商品实体
        ProductService productService = new ProductServiceImpl() ;
        Product product = productService.getProduct(pid);

        //封装购物车项
        CartItem cartItem = new CartItem() ;
        cartItem.setProduct(product) ;
        int proCount = Integer.parseInt(count) ;
        cartItem.setCount(proCount) ;

        //从上面的getCartFromHttpSession获取购物车
        Cart cart = getCartFromHttpSession(request);
        //调用它的方法
        cart.addCartItem2Cart(cartItem) ;

        //重定向到 购物车页面
        response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");


    }

    /**
     * 从购物车中删除购物车项
     * @param request  请求对象
     * @param response  响应对象
     * @throws IOException
     */
    public void delCartItemFromCart(HttpServletRequest request,HttpServletResponse response) throws IOException {

        //接收参数
        String pid = request.getParameter("pid") ;

        //获取购物车---HttpSession中
        Cart cart = getCartFromHttpSession(request) ;

        //通过pid删除购物车项
        cart.removeCartItemFromCart(pid) ;

        //重定向到购物车页面
        response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");
    }

    /**
     * 清空购物车
     * @param request 请求对象
     * @param response 响应对象
     */
    public void clareCart(HttpServletRequest request,HttpServletResponse response) throws IOException {
        //获取购物车
        Cart cart = getCartFromHttpSession(request);

        //调用清空方法
        cart.clearCart();

        //将HttpSession中的cart删除了
        request.getSession().removeAttribute("cart");

        //重定向到购物车页面
        response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");
    }

}
